package com.chen.controller;

import com.chen.pojo.common.PageResult;
import com.chen.pojo.dto.TaskDto;
import com.chen.pojo.dto.TaskJobDto;
import com.chen.pojo.entry.TaskCollect;
import com.chen.pojo.entry.TaskDetails;
import com.chen.pojo.entry.TaskStatusType;
import com.chen.pojo.entry.TaskType;
import com.chen.pojo.vo.TaskReportVo;
import com.chen.pojo.vo.TaskVo;
import com.chen.pojo.vo.TaskWorkVo;
import com.chen.service.TaskService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author chen
 * @version 1.0
 * @create_date 2025/8/20
 * 任务管理
 */
@Slf4j
@RestController
@RequestMapping("/api/task-service")
public class TaskController {
    @Autowired
    private TaskService taskService;

    // 人员工作统计
    @GetMapping("/task/userWork")
    public TaskWorkVo getUserWork(Integer userId,
                                  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime start,
                                  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime end
    ) {
        return taskService.getUserWork(userId, start, end);
    }

    // 人员排名
    @GetMapping("/task/userWorkTop10/{start}/{end}/{isRepair}/{regionId}")
    public List<TaskWorkVo> getUserWorkTop10(
            @PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate start,
            @PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end,
            @PathVariable Boolean isRepair, @PathVariable String regionId) {
        return taskService.getUserWorkTop10(start, end, isRepair, regionId);
    }

    // 工单状态统计
    @GetMapping("task/collectReport/{start}/{end}")
    public List<TaskCollect> collectReport(
            @PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate start,
            @PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
        return taskService.collectReport(start, end);
    }

    // 取消工单
    @PostMapping("/task/cancel/{taskId}")
    public Boolean cancelTaskById(@PathVariable String taskId) {
        return taskService.cancelTaskById(taskId);
    }

    // 查看工单的补货详情
    @GetMapping("/taskDetails/{taskId}")
    public List<TaskDetails> getTaskDetails(@PathVariable String taskId) {
        return taskService.getTaskDetails(taskId);
    }

    // 新增工单
    @PostMapping("/task/create")
    public Boolean addTask(@RequestBody TaskDto taskDto) {
        return taskService.addTask(taskDto);
    }

    // 工单配置
    @PostMapping("/task/autoSupplyConfig")
    public Boolean autoSupplyConfig(@RequestBody TaskJobDto taskJobDto) {
        return taskService.autoSupplyConfig(taskJobDto);
    }

    // 工单配置查询
    @GetMapping("/task/supplyAlertValue")
    public Integer supplyAlertValue() {
        return taskService.supplyAlertValue();
    }

    // 查看工单详细
    @GetMapping("/task/taskInfo/{taskId}")
    public TaskVo getTaskInfoById(@PathVariable String taskId) {
        return taskService.getTaskInfoById(taskId);
    }

    /**
     * 工单搜索
     *
     * @param pageIndex 起始页
     * @param pageSize  页大小
     * @param taskCode  任务编号
     * @param status    任务状态
     * @param isRepair  是否是维修工单
     * @return 搜索结果
     */
    @GetMapping("/task/search")
    public PageResult<TaskVo> searchList(Integer pageIndex, Integer pageSize,
                                         Boolean isRepair, String taskCode, Integer status) {
        return taskService.searchList(pageIndex, pageSize, taskCode, status, isRepair);
    }

    // 获取所有工单类型
    @GetMapping("/taskType/list")
    public List<TaskType> getAllTaskType() {
        return taskService.getAllTaskType();
    }

    /**
     * 获取所有工单状态
     *
     * @return 结果
     */
    @GetMapping("/task/allTaskStatus")
    public List<TaskStatusType> getAllTaskStatus() {
        return taskService.getAllTaskStatus();
    }

    /**
     * 工单统计
     *
     * @param start 开始日期
     * @param end   结束日期
     * @return 统计结果
     */
    @GetMapping("/task/taskReportInfo/{start}/{end}")
    public List<TaskReportVo> getTaskReportInfo(
            @PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime start,
            @PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime end) {
        log.info("开始进行工单统计，统计开始日期：{}，结束日期：{}", start, end);
        return taskService.getTaskReportInfo(start, end);
    }

    /**
     * 获取售货机维修次数
     *
     * @param start     开始日期
     * @param end       接收日期
     * @param innerCode 售货机编号
     * @return 维修次数
     */
    @GetMapping("/task/repairCount/{innerCode}/{start}/{end}")
    public Long getRepairCount(@PathVariable String innerCode,
                               @PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate start,
                               @PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
        return taskService.getRepairCount(start, end, innerCode);
    }
}
